package com.cg.asm.body.service.user.impl;

import com.cg.asm.body.dao.user.UserGroupMapper;
import com.cg.asm.body.domain.dto.user.UserGroupDTO;
import com.cg.asm.body.domain.dto.user.UserGroupRoleDTO;
import com.cg.asm.body.domain.vo.user.UserGroupRoleVO;
import com.cg.asm.body.domain.vo.user.UserGroupVO;
import com.cg.asm.body.service.user.IUserGroupService;
import com.cg.asm.body.util.AsmBodyCommonUtil;
import com.cg.asm.body.util.constants.DicEnum;
import com.cg.asm.client.AsmUUID;
import com.cg.asm.client.exception.AsmException;
import com.cg.asm.client.exception.MybatisExample;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.github.pagehelper.util.StringUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

@Service
public class UserGroupService implements IUserGroupService {


    @Resource
    private UserGroupMapper userGroupMapper;

    @Override
    public PageInfo<UserGroupVO> selectByUserGroup(MybatisExample mybatisExample) {
        PageHelper.startPage(mybatisExample.getOffset(), mybatisExample.getLimit());
        List<UserGroupVO> userGroup = userGroupMapper.selectByUserGroup(mybatisExample);
        return new PageInfo<>(userGroup);
    }

    @Override
    public List<UserGroupVO> getUserGroupList() {
        return userGroupMapper.getUserGroupList();
    }

    @Override
    public void saveUserGroup(String userGroupName) {
        if(StringUtils.isNotEmpty(userGroupName)){
            UserGroupDTO userGroupDTO = new UserGroupDTO();
            userGroupDTO.setUserGroupId(AsmUUID.generate());
            userGroupDTO.setUserGroupType(DicEnum.USER_GROUP_OTHER.getKey());
            userGroupDTO.setCreatorDate(new Date());
            userGroupDTO.setUserGroupName(userGroupName);
            userGroupDTO.setCreatorUserId(AsmBodyCommonUtil.getCurrentUserLoginVO().getUserId());
            userGroupMapper.saveUserGroup(userGroupDTO);
        }else{
            throw new AsmException("保存用户分组失败：用户分组名称不能为空！");
        }
    }

    @Override
    public void updateUserGroup(String userGroupId, String userGroupName) {
        if(StringUtils.isNotEmpty(userGroupId) && StringUtils.isNotEmpty(userGroupName)){
            userGroupMapper.updateUserGroup(userGroupId,userGroupName);
        }else{
            throw new AsmException("更新用户分组失败：缺少关键参数！");
        }
    }

    @Override
    public void delUserGroup(String userGroupId) {
        if(StringUtils.isNotEmpty(userGroupId)){
            userGroupMapper.delUserGroup(userGroupId);
            userGroupMapper.delUserGroupRole(userGroupId);
        }else{
            throw new AsmException("删除用户分组失败：缺少分组Id！");
        }
    }

    @Override
    public void saveUserGroupRole(UserGroupRoleVO userGroupRoleVO) {
        if (null != userGroupRoleVO && StringUtil.isNotEmpty(userGroupRoleVO.getUserGroupId())) {
            userGroupMapper.delUserGroupRole(userGroupRoleVO.getUserGroupId());
            if (null != userGroupRoleVO.getRoleIds()) {
                for (String roleId : userGroupRoleVO.getRoleIds()) {
                    UserGroupRoleDTO userGroupRoleDTO = new UserGroupRoleDTO();
                    userGroupRoleDTO.setUserGroupRoleId(AsmUUID.generate());
                    userGroupRoleDTO.setUserGroupId(userGroupRoleVO.getUserGroupId());
                    userGroupRoleDTO.setRoleId(roleId);
                    userGroupMapper.saveUserGroupRole(userGroupRoleDTO);
                }
            }
        } else {
            throw new AsmException("分配角色失败：缺失用户分组Id信息");
        }
    }

    @Override
    public List<String> roleByUserGroup(String userGroupId) {
        return userGroupMapper.roleByUserGroup(userGroupId);
    }
}
